Die Symbolleiste "Visual Basic"
In diesem Kapitel lernen Sie:
|
Wir haben unseren ersten Makro, "DruckenOhneGitternetz", mit dem Makro-Rekorder erstellt und über das Menü "Extras" zum Laufen gebracht. Das genügt bei einem so einfachen Programm. Bevor wir aber ans wirkliche VBA-Programmieren gehen, wollen wir die Werkzeuge kennenlernen, die EXCEL uns zur Verfügung stellt. Sie sind in der Symbolleiste "Visual Basic" enthalten.
Elemente der Symbolleiste "Visual Basic"
Wechseln Sie bitte wieder in das VBA-Modulblatt, in dem EXCEL das Programm "DruckenOhneGitternetz" aufgezeichnet hat. Sicher fällt Ihnen auf, daß EXCEL in diesem Augenblick eine neue Symbolleiste anbietet. Sie sieht so aus:
Abbildung 4: Die Symbolleiste "Visual Basic", mit deren Hilfe
Sie VBA-Programme aufzeichnen, starten und testen können.
Die einzelnen Symbole haben folgende Bedeutung:
|
Neues Visual Basic-Modul Fügt ein neues Visual Basic-Modul in die aktive Arbeitsmappe ein. |
|
Menü-Editor Zeigt das Dialogfeld Menü-Editor an, mit dem Sie Microsoft Excel-Menüs für die aktive Arbeitsmappe erstellen und bearbeiten können. |
|
Objekt-Katalog Der Objekt-Katalog zeigt Ihnen die Namen aller Prozeduren, Funktionen, Methoden, Eigenschaften und Objekte aus allen geöffneten Arbeitsmappen. Sie können entweder zum Code springen oder den Code, mit dem Prozedur oder Funktion angesprochen werden, an die Cursor-Position in Ihrem aktiven Modulblatt kopieren. |
|
Makro ausführen Führt den Makro aus, in dem der Cursor steht; steht der Cursor nicht in einem Makro, wird das Dialogfeld Makro angezeigt, in dem Sie einen Makro auswählen und ausführen können. |
|
Makro-Einzelschritt Führt nur die erste Zeile des Programmes aus; zeigt dann das "Testfenster". |
|
Makro fortsetzen Nimmt das Ausführen eines angehaltenen Makros wieder auf; beendet Modus "Einzelschritt" und führt den Makro ohne Unterbrechnung weiter aus. |
|
Makro-Aufzeichnung beenden Beendet das Ausführen des gerade laufenden Makros. Beendet das Aufzeichnen mit dem Makro-Rekorder. |
|
Makro-Aufzeichnung beginnen Zeigt das Dialogfeld "Makro aufzeichnen" an und startet dann den Makro-Rekorder. |
|
Haltepunkte ein-/ausschalten Hält ein VBA-Programm an und wechselt in den Unterbrechungsmodus. |
|
Aktuellen Wert zeigen Zeigt im Dialogfeld "Aktuellen Wert anzeigen" den augenblicklichen Wert des gewählten (markierten) Ausdruckes. |
|
Einzelschritt Führt eine Zeile eines VBA-Codes aus und kehrt dann wieder in den Unterbrechungsmodus zurück. |
|
Prozedurschritt Führt eine Zeile eines VBA-Codes aus und kehrt dann in den Unterbrechungsmodus zurück. Wird in dieser Zeile ein Unterprogramm aufgerufen, so wird dieses ohne Unterbrechnung abgearbeitet. |
Wir wollen als nächstes die Arbeitsweise dieser Schaltknöpfe demonstrieren. Legen Sie dazu zunächst ein neues Modulblatt an.
Schreiben Sie dann den folgenden Code:
Sub Hauptprozedur() Wert1 = 5 Wert2 = 12 Produkt = Wert1 * Wert2 End Sub
Setzen Sie in der Zeile "End Sub" einen Haltepunkt.
Klicken Sie auf den Schaltknopf "Makro ausführen".
Sobald das VBA-Programm die Zeile mit dem Haltepunkt erreicht hat, geht es in den Unterbrechnungs-Modus und EXCEL zeigt Ihnen das "Testfenster":
Das VBA-Testfenster
Im Testfenster können Sie einzelne Codezeilen ausführen, Variablenwerte anzeigen, Überwachungsausdrücke ansehen und weitere Tests durchführen.
Abbildung 5: Das VBA-Testfenster.
Sie zeigen das Testfenster an, indem Sie aus dem Menü "Ansicht" den Befehl "Testfenster" wählen.
Das Testfenster wird geöffnet
Hinweis Während der Ausführung können keine Anweisungen im Direktbereich des Testfensters eingegeben werden. Mit dem Debug-Objekt (so heißt das Testfenster auf Englisch) und der Print-Methode können Sie jedoch Werte aus dem gerade laufenden Program ins Direktfenster hinschreiben und sie ansehen, sobald das Programm wieder anhält. Der folgende Code gibt zum Beispiel den Wert der Variablen A im Testfenster aus:
Debug.Print A
und der folgende Code gibt noch erklärenden Text dazu:
Debug.Print "Wert von A in Prozedur X"; A
Der Strichpunkt zwischen Text und Variablenname ("A") führt dazu, daß A mit nur einem Zeichen Abstand zum Text ausgedruckt wird. Ein Beistrich als Trenner läßt einige Zeichen Abstand.
Wenn ein Programm unterbrochen wurde, können Sie auch Anweisungen im Direktbereich des Testfensters eingeben und dort ausführen lassen.
Das Testfenster besteht aus folgenden Elementen:
Direktbereich Im Direktbereich wird Code zur sofortigen Ausführung eingegeben. Er wird standardmäßig beim ersten Öffnen des Testfensters angezeigt. Wählen Sie das Register Direkt zur Anzeige des Direktbereichs, wenn der Überwachungsbereich angezeigt wird.
Überwachungsbereich Der Überwachungsbereich zeigt Informationen zu allen definierten Überwachungsausdrücken an. Wählen Sie das Register Überwachung zur Anzeige des Überwachungsbereichs.
Prozedurfeld Das Prozedurfeld zeigt im Unterbrechungsmodus den Namen des Projekts und des Moduls an, und den Namen der Prozedur, in der die Ausführung unterbrochen wurde. Mit der Schaltfläche rechts neben dem Prozedurfeld kann das Dialogfeld Aufrufe angezeigt werden. Es zeigt Ihnen, welche Programmteile bis zu der Codezeile ausgeführt wurden, in der Ihr Programm angehalten hat.
Bildschirmteiler Der Bildschirmteiler unterteilt das Testfenster in zwei Bereiche. Der obere Bereich stellt den Direkt- oder Überwachungsbereich dar. Der Codebereich unterhalb des Bildschirmteilers zeigt den Code an der Stelle an, an der die Ausführung unterbrochen wurde. Sie ändern die Größe eines Bereichs, indem Sie den Bildschirmteiler nach oben oder nach unten ziehen.
Codebereich Der Codebereich zeigt den Prozedurcode an der Stelle, an der die Ausführung unterbrochen wurde.
Programme schrittweise abarbeiten
Wir wollen zunächst anhand des kurzen VBA-Programmes auf Seite 11 die Arbeitsmöglichkeiten mit der Makro-Symbolleiste erkunden.
|
Klicken Sie auf den Schaltknopf "Makroeinzelschritt". VBA zeigt Ihnen das Testfenster. Die erste Zeile des Codes ist eingerahmt. Dies ist die Zeile, die VBA gerade abgearbeitet hat. |
|
Drücken Sie auf den Schaltknopf "Einzelschritt". VBA arbeitet die zweite Zeile ab; jetzt ist diese Zeile eingerahmt. |
|
Drücken Sie nochmals auf den Schaltknopf "Einzelschritt". VBA arbeitet die dritte Zeile ab. |
|
Lassen sie das VBA-Programm jetzt ohne Unterbrechnung bis zum Schluß ablaufen. Drücken Sie dazu den Schaltknopf "Makro fortsetzen". Das Testfenster verschwindet. |
Haltepunkt setzen
Setzen Sie den Cursor in die Zeile mit dem Code
Wert2 = 12
|
Drücken Sie den Schaltknopf "Haltepunkt ein-/ausschalten". |
|
Drücken Sie den Schaltknopf "Makro ausführen" |
VBA kennzeichnet diese Zeile, in dem es einen (standardmäßig roten) Balken unter die Zeile legt und den Codetext weiß darstellt:
Wert2 = 12 |
Der Makro läuft bis in die mit dem Haltepunkt versehene Zeile; dann zeigt EXCEL das Testfenster. Jetzt können Sie im Fenster "Direkt" Ihren Code testen oder VBA andere Aufgaben lösen lassen.
Direktbereich benützen
Variablenwerte erfragen und überwachen
Setzen Sie den Cursor in das Fenster "Direkt". Geben Sie den folgenden Code ein:
? Wert1
Drücken Sie die Eingabetaste. VBA gibt in der nächsten Zeile des Direktfensters das Ergebnis der Berechnung aus:
? Wert1 5
Wie Sie sehen, entspricht das Fragezeichen dem Befehl "Gib den Wert der Variablen rechts vom Fragezeichen aus".
Variablenwerte neu bestimmen
Setzen Sie den Cursor in die erste freie Zeile des Direktfensters. Geben Sie ein:
Wert1=8
Drücken Sie die Eingabetaste. Schreiben Sie in die nächste Zeile:
? Wert1
EXCEL antwortet mit:
8
und hat somit diesen Wert zur Kenntnis genommen.
Drücken Sie jetzt solange den Schaltknopf "Einzelschritt", bis die Zeile "Ende Sub" zur aktiven Zeile im VBA-Programm wird.
Wechseln Sie wieder ins Direktfenster. Wenn Sie VBA die Frage nach dem Wert des Produkts von "Wert1" und "Wert2" stellen, erhalten Sie als Antwort "96". VBA hat also mit dem von Ihnen händisch veränderten Wert weitergearbeitet.
Wert1=8 ? Wert1 8 ? Produkt 96
Den aktuellen Wert eines Ausdruckes zeigen
Wenn Sie die Codezeile, aus der Sie einen Wert erfragen wollen, im Codebereich sehen, können Sie auch so vorgehen:
Setzen Sie den Cursor in das Codewort "Wert1".
Markieren sie das ganze Wort durch Maus-Doppelklick.
|
Klicken Sie auf den Schaltknopf "Aktuellen Wert zeigen" oder wählen Sie im Menü "Extras" den Befehl "Aktuellen Wert anzeigen" oder drücken Sie UMSCHALT+F9. |
VBA zeigt Ihnen darauf das Dialogfeld "Aktuellen Wert anzeigen":
Abbildung 6: In diesem Dialogfeld zeigt VBA den aktuellen Wert
eines von Ihnen markierten Code-Ausdruckes.
Das Dialogfenster "Aktuellen Wert anzeigen"
Der Dialog "Aktuellen Wert anzeigen" zeigt den letzten Wert eines ausgewählten Ausdrucks an. Erhält eine Variable während des Programmlaufes mehrere Werte, so wird doch, egal in welcher Zeile sie den Ausdruck auswählen, immer nur der letzte Wert angezeigt.
Die Elemente des Dialogs "Aktuellen Wert anzeigen" sind:
Schaltfläche "Hinzufügen" Fügt den Ausdruck zum Überwachungsbereich hinzu.
Feld "Aktueller Kontext" Die Namen der Arbeitsmappe, des Moduls und der Prozedur, in der sich der Überwachungsausdruck befindet.
Feld "Ausdruck" Der ausgewählte Ausdruck.
Feld "Wert" Der Wert des ausgewählten Ausdrucks. Der aktuelle Wert wird nicht angezeigt, wenn der Kontext des Ausdrucks außerhalb der Prozeduren liegt, die im Dialog "Aufrufe" aufgeführt sind.
Code im Direktbereich testen
Wir haben im Direktbereich weiter oben den Wert einer bestehenden Variablen erfragt und später verändert. Sie können dort aber weitaus mehr tun:
Im Direktbereich eingegebener Code wird sofort ausgeführt. Sie können eine Anweisung in den Direktbereich eingeben oder einfügen und sie durch Drücken der EINGABETASTE sofort ausführen. Der folgende Code zeigt zum Beispiel den Wert der Variablen A an, in diesem Fall 5.
?A 5
Sie können aber auch neue Variable schaffen und ihnen Werte zuweisen:
NeueVariable=7 ? NeueVariable 7
Zwei Betriebszustände des Direktfensters sind möglich: "Wartemodus" und "Unterbrechungsmodus". "Wartemodus" ist der Zustand nach den Beenden eines VBA-Programmes. Das Testfenster ist über das Menü "Ansicht" erreichbar, sobald das aktuelle Blatt ein Modulblatt ist. Im "Unterbrechungsmodus" ist ein VBA-Programm dann, wenn es an einem Haltepunkt angelangt ist oder an einer "Stop"-Anweisung, an einer fehlerhaften Zeile oder an einem überwachten Ausdruck, bei dem Sie festgelegt haben, daß die Programmausführung unterbrochen werden soll.
Im Wartemodus wird der Code in einem globalen Kontext ausgeführt. Im Unterbrechungsmodus wird der Code im Direktbereich in dem Kontext ausgeführt, der durch die Titelleiste des Testfensters angegeben wird. Wenn Sie zum Beispiel "print <Variablenname>" eingeben, ist die Ausgabe der Wert einer lokalen Variablen. Dies ist dasselbe, als wenn die Print-Methode in der im Prozedurfeld angegebenen Prozedur ausgeführt worden wäre.
Der Direktbereich erscheint standardmäßig beim ersten Öffnen des Testfensters. Durch Mausklick auf das Register "Direkt" können Sie zum Direktbereich wechseln, wenn der Überwachungsbereich angezeigt wird.
Überwachungsausdrücke hinzufügen
Der Schaltknopf "Aktuellen Wert anzeigen" gibt Ihnen auch die Möglichkeit, im Überwachungsbereich des Testfensters den Wert eines Ausdruckes während der Laufzeit eines Programmes permanent anzuzeigen und zu untersuchen. Wählen Sie dazu den Schaltknopf "Hinzufügen".
Wählen Sie dazu im Testfenster die Registermarke "Überwachung".
Wenn der Wert nicht verfügbar ist, wird eine der folgenden Meldungen angezeigt:
Kann Modul nicht übersetzen-Das Modul, in dem der Überwachungsausdruck definiert ist, enthält einen Syntaxfehler und kann nicht übersetzt werden, oder der Kontext des Überwachungsausdrucks ist mit "Alle Module" definiert, und eines der Module im Kontext kann nicht übersetzt werden.
Ungültiger Überwachungsausdruck-Der Überwachungsausdruck ist kein gültiger Ausdruck. Gültige Überwachungsausdrücke können Konstanten, Variablen, Funktion-Prozeduraufrufe sowie Elemente benutzerdefinierter Typen enthalten, jedoch keine Sub-Prozeduraufrufe oder benutzerdefinierte Typen.
Außerhalb des Kontexts-Der Wert des Überwachungsausdrucks ist innerhalb des momentan gültigen Kontexts nicht verfügbar. So sind beispielsweise im Wartemodus alle Überwachungsausdrücke außerhalb des Kontexts.
Kann Datenfeld nicht überwachen: Der Überwachungsausdruck ist ein Datenfeld. Es können jedoch nur einzelne Elemente von Datenfeldern überwacht werden.
Fügen Sie aus unserem kleinen Codestück alle Variablennamen: "Wert1", "Wert2" und "Produkt" in den Überwachungsbereich ein. Lassen Sie dann den Code vom Beginn weg im Einzelschritt-Modus laufen. Beobachten Sie, was sich im Überwachungsfenster tut.
Abbildung 7: Im Überwachungsbereich des Testfensters finden Sie
das Ergebnis der überwachten Ausdrücke. Der Ausdruck "Produkt" ist noch nicht
ausgewertet worden und daher "Leer".
Mehr Möglichkeiten, einen Ausdruck zu überwachen, erhalten Sie über das Menü "Extras" und den Befehl "Überwachung hinzufügen...". Wenn Sie diesen Befehl wählen, zeigt EXCEL das Dialogfeld "Überwachung hinzufügen":
Abbildung 8: Dieses Dialogfeld läßt Sie Art und Wirkungsweise
einer Überwachung festlegen
Der Dialog "Überwachung hinzufügen" dient zur Eingabe eines Überwachungsausdrucks. Als Ausdruck kann jeder gültige Visual-Basic-Ausdruck verwendet werden. Überwachungsausdrücke werden im Überwachungsbereich des Testfensters aktualisiert, wenn Sie in den Unterbrechungsmodus wechseln oder nachdem Sie eine Anweisung im Direktbereich ausgeführt haben.
Wichtig Wählen Sie den kleinsten ausreichenden Gültigkeitsbereich. Wenn Sie alle Prozeduren oder Module auswählen, kann die Ausführungsgeschwindigkeit Ihres Programmes deutlich herabgesetzt werden, da der Ausdruck nach der Ausführung jeder einzelnen Anweisung ausgewertet wird. Wenn Sie eine bestimmte Prozedur als Kontext auswählen, wirkt sich das auf das Tempo nur so lange aus, wie die Prozedur in der Liste mit den aktiven Prozeduraufrufen aufgeführt ist. Sie können diese Liste anzeigen, indem Sie im Testfenster auf die Schaltfläche rechts neben dem Prozedurfeld klicken.
Und so gehen Sie beim Hinzufügen eines neuen Überwachungsausdruckes vor:
Die Elemente des Dialogs "Überwachung hinzufügen" sind:
Feld "Ausdruck": Zeigt standardmäßig das Befehlswort im Code an, in dem der Cursor steht. Sie können aber auch einen anderen Ausdruck angeben.
Gruppe "Kontext":
Prozedur: Zeigt den Namen der Prozedur an, in der sich der ausgewählte Ausdruck befindet (Voreinstellung), und dient zum Definieren der Prozedur(en), in der/denen der Ausdruck ausgewertet wird. An dieser Stelle können Sie alle Prozeduren oder einen Prozedurkontext für die Auswertung des Ausdrucks angeben.
Modul: Zeigt den Namen des Moduls an, in dem sich der ausgewählte Ausdruck befindet (Voreinstellung). An dieser Stelle können Sie alle Module oder einen bestimmten Modulkontext für die Auswertung des Ausdrucks angeben.
Projekt: Zeigt den Namen der aktuellen Arbeitsmappe an. Ausdrücke mit einem Kontext außerhalb der aktuellen Arbeitsmappe können nicht ausgewertet werden.
Gruppe "Art der Überwachung"
Ausdruck überwachen: Der Ausdruck und der zugehörige Wert werden im Überwachungsbereich des Testfensters angezeigt. Wenn Sie in den Unterbrechungsmodus wechseln, wird der Wert des Überwachungsausdrucks automatisch aktualisiert.
Ausführung unterbrechen, wenn Wert "Wahr" ist: Der Unterbrechungsmodus für das Modul wird automatisch aktiviert, sobald der Ausdruck innerhalb des angegebenen Kontexts den Wert Wahr ergibt.
Ausführung unterbrechen, wenn Wert sich ändert: Der Unterbrechungsmodus für das Modul wird automatisch aktiviert, sobald sich der Ausdruck innerhalb des angegebenen Kontexts ändert.
Weitere Möglichkeiten zur Arbeit mit dem Testfenster
Programm aus dem Testfenster heraus starten
Testfenster anzeigen (STRG+g). Aus dem Direkt-Bereich des Testfensters heraus die Prozedur oder Funktion aufrufen, die das Programm ins Laufen bringt.
Prozedur starten
Prozeduraufruf gefolgt von Parameter-Aufruf eintragen; dann ENTER-Taste drücken.
Funktion starten
Funktionsergebnis einer Variablen zuweisen oder mit ? zur Anzeige bringen; Parameter in Klammern setzen. Dann ENTER-Taste drücken.
Laufendes Programm anhalten und ins Testfenster wechseln
Tasten STRG+PAUSE drücken, während Ihr Programm läuft; Dialogfeld "Makrofehler" bietet Optionen "Ende"; "Weiter"; "Testen" und "Gehe zu" an. "Testen" wählen.
Programm im Einzelschritt weiterlaufen lassen
F8 drücken.
Programm im Prozedurschritt weiterlaufen lassen
UMSCHALT+F8 drücken.
Haltepunkt setzen/löschen
Bringen Sie im Codebereich des Testfensters den Cursor in die Zeile, in der Sie den Haltepunkt setzen oder einen vorhandenen Haltepunkt löschen wollen. Drücken Sie dann F9.
Aktuellen Wert einer Variablen anzeigen
Bringen Sie-bei unterbrochenem Programm-im Codebereich des Testfenster den Cursor auf den Text der Variablen. Drücken Sie dann UMSCHALT+F9.
Copyright © by JOANNEUM RESEARCH Forschungsgesellschaft mbH |